package correctness;

import static org.junit.Assert.*;
import model.LogicType;
import model.editormodel.EditorModel;
import model.editormodel.Input;
import model.editormodel.Output;

import org.junit.Test;

/**
 * <b> Mit dieser Testklasse wird folgende Vorgabe getestet:</b> <br>
 * <br>
 * Eine Schaltung mit einem NOT-Gatter und einer Verbindung, die dessen Ausgang
 * mit seinem Eingang verbindet wird erstellt. Es werden die Checks ausgefuehrt
 * und ueberprueft, ob der Test <code>hasFeedback()</code> "wahr" zurueckgibt.
 */
public class FeedbackTest {

	/**
	 * Testet, ob eine Rueckkopplung vorhanden ist
	 */
	@Test
	public void testFeedback() {

		// Initialisieren einer neuen Schaltung
		EditorModel eModel = new EditorModel();

		// Hinzufuegen eines NOT-Gatters
		eModel.addLogicElement(LogicType.NOT, null, 10, 10);

		// Verbindet den Ausgang des NOT-Gatters mit dem Eingang des NOT-Gatters
		eModel.setConnection(
				eModel.getCircuitModel().getUnmodifableElementsOnEditor()
						.get("NOT_1").getOutputs().get(Output.STD_O),
				eModel.getCircuitModel().getUnmodifableElementsOnEditor()
						.get("NOT_1").getInputs().get(Input.STD_A));

		// Pruefen ob die aktuelle Schaltung eine Rueckkopplung besitzt
		assertTrue("Es ist keine Rueckkopplung vorhanden!", eModel
				.getCircuitModel().hasFeedback());
	}
}